package com.ui.pickerview.view;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.mywork.R;
import com.ui.pickerview.adapter.ArrayWheelAdapter;
import com.ui.pickerview.adapter.NumericWheelAdapter;
import com.ui.pickerview.lib.WheelView;
import com.ui.pickerview.listener.OnItemSelectedListener;


public class WheelTime
{
	public static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
	private View view;
	private WheelView wv_year;
	private WheelView wv_month;
	private WheelView wv_day;
	private WheelView wv_hours;
	private WheelView wv_mins;
	private WheelView shangwuxiawu;
	
	private TextView tvYear;
	private TextView tvMonth;
	private TextView tvDay;
	private TextView tvHour;
	

	private TimePickerView.Type type;
	public static final int DEFULT_START_YEAR = 1990;
	public static final int DEFULT_END_YEAR = 2100;
	private int startYear = DEFULT_START_YEAR;
	private int endYear = DEFULT_END_YEAR;
	ArrayList<String> list_shx = null;

	public WheelTime(View view)
	{
		super();
		this.view = view;
		type = TimePickerView.Type.ALL;
		setView(view);
	}

	public WheelTime(View view, TimePickerView.Type type)
	{
		super();
		this.view = view;
		this.type = type;
		setView(view);
	}

	public void setPicker(int year, int month, int day)
	{
		this.setPicker(year, month, day, 0, 0);
	}

	/**
	 * @Description: TODO 弹出日期时间选择器
	 */
	@SuppressWarnings("rawtypes")
	public void setPicker(int year, int month, int day, int h, int m)
	{
		
		// 添加大小月月份并将其转换为list,方便之后的判断
		String[] months_big =
		{ "1", "3", "5", "7", "8", "10", "12" };
		String[] months_little =
		{ "4", "6", "9", "11" };
		

		final List<String> list_big = Arrays.asList(months_big);
		final List<String> list_little = Arrays.asList(months_little);
		list_shx = new ArrayList<String>();
		list_shx.add("上午");
		list_shx.add("下午");
		
		Context context = view.getContext();
		// 年
		wv_year = (WheelView) view.findViewById(R.id.year);
		wv_year.setAdapter(new NumericWheelAdapter(startYear, endYear));// 设置"年"的显示数据
		wv_year.setCurrentItem(year - startYear);// 初始化时显示的数据

		// 月
		wv_month = (WheelView) view.findViewById(R.id.month);
		wv_month.setAdapter(new NumericWheelAdapter(1, 12, "%02d"));
		wv_month.setCurrentItem(month);

		// 日
		wv_day = (WheelView) view.findViewById(R.id.day);
		// 判断大小月及是否闰年,用来确定"日"的数据
		System.out.println("month->" + month);
		if (list_big.contains(String.valueOf(month + 1)))
		{
			wv_day.setAdapter(new NumericWheelAdapter(1, 31, "%02d"));
		} else if (list_little.contains(String.valueOf(month + 1)))
		{
			wv_day.setAdapter(new NumericWheelAdapter(1, 30, "%02d"));
		} else
		{
			// 闰年
			if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
				wv_day.setAdapter(new NumericWheelAdapter(1, 29, "%02d"));
			else
				wv_day.setAdapter(new NumericWheelAdapter(1, 28, "%02d"));
		}
		wv_day.setCurrentItem(day - 1);
		
		shangwuxiawu = (WheelView) view.findViewById(R.id.shangwuxiawu);
		shangwuxiawu.setAdapter(new ArrayWheelAdapter(list_shx, list_shx.size()));
		shangwuxiawu.setCurrentItem(0);

		wv_hours = (WheelView) view.findViewById(R.id.hour);
		wv_hours.setAdapter(new NumericWheelAdapter(0, 23, "%02d"));
		wv_hours.setCurrentItem(h);

		wv_mins = (WheelView) view.findViewById(R.id.min);
		wv_mins.setAdapter(new NumericWheelAdapter(0, 59, "%02d"));
		wv_mins.setCurrentItem(m);

		// 添加"年"监听
		OnItemSelectedListener wheelListener_year = new OnItemSelectedListener()
		{
			@Override
			public void onItemSelected(int index)
			{
				int year_num = index ;
				System.out.println("year_num--->"+year_num);
				// 判断大小月及是否闰年,用来确定"日"的数据
				int maxItem = 30;
				if (list_big.contains(String.valueOf(wv_month.getCurrentItem())))
				{
					wv_day.setAdapter(new NumericWheelAdapter(1, 31, "%02d"));
					maxItem = 31;
				} else if (list_little.contains(String.valueOf(wv_month.getCurrentItem() )))
				{
					wv_day.setAdapter(new NumericWheelAdapter(1, 30, "%02d"));
					maxItem = 30;
				} else
				{
					if ((year_num % 4 == 0 && year_num % 100 != 0) || year_num % 400 == 0)
					{
						wv_day.setAdapter(new NumericWheelAdapter(1, 29, "%02d"));
						maxItem = 29;
					} else
					{
						wv_day.setAdapter(new NumericWheelAdapter(1, 28, "%02d"));
						maxItem = 28;
					}
				}
				if (wv_day.getCurrentItem() > maxItem - 1)
				{
					wv_day.setCurrentItem(maxItem - 1);
				}
			}
		};
		// 添加"月"监听
		OnItemSelectedListener wheelListener_month = new OnItemSelectedListener()
		{
			@Override
			public void onItemSelected(int index)
			{
				int month_num = index ;
				System.out.println("month_num--->"+month_num);
				int maxItem = 30;
				// 判断大小月及是否闰年,用来确定"日"的数据
				if (list_big.contains(String.valueOf(month_num)))
				{
					wv_day.setAdapter(new NumericWheelAdapter(1, 31, "%02d"));
					maxItem = 31;
				} else if (list_little.contains(String.valueOf(month_num)))
				{
					wv_day.setAdapter(new NumericWheelAdapter(1, 30, "%02d"));
					maxItem = 30;
				} else
				{
					if (((wv_year.getCurrentItem() ) % 4 == 0 && (wv_year.getCurrentItem() ) % 100 != 0) || (wv_year.getCurrentItem() ) % 400 == 0)
					{
						wv_day.setAdapter(new NumericWheelAdapter(1, 29, "%02d"));
						maxItem = 29;
					} else
					{
						wv_day.setAdapter(new NumericWheelAdapter(1, 28, "%02d"));
						maxItem = 28;
					}
				}
				if (wv_day.getCurrentItem() > maxItem - 1)
				{
					wv_day.setCurrentItem(maxItem - 1);
				}

			}
		};
		wv_year.setOnItemSelectedListener(wheelListener_year);
		wv_month.setOnItemSelectedListener(wheelListener_month);
		
		tvYear = (TextView) view.findViewById(R.id.tvYear);
		tvMonth = (TextView) view.findViewById(R.id.tvMonth);
		tvDay = (TextView) view.findViewById(R.id.tvDay);
		tvHour = (TextView) view.findViewById(R.id.tvHour);

		// 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同)
		int textSize = 6;
		switch (type)
		{
		case ALL:
			textSize = textSize * 3;
			break;
		case YEAR_MONTH_DAY:
			textSize = textSize * 4;
			wv_hours.setVisibility(View.GONE);
			wv_mins.setVisibility(View.GONE);
			shangwuxiawu.setVisibility(View.GONE);
			break;
		case HOURS_MINS:
			textSize = textSize * 4;
			wv_year.setVisibility(View.GONE);
			wv_month.setVisibility(View.GONE);
			wv_day.setVisibility(View.GONE);
			shangwuxiawu.setVisibility(View.GONE);
			break;
		case MONTH_DAY_HOUR_MIN:
			textSize = textSize * 3;
			wv_year.setVisibility(View.GONE);
			shangwuxiawu.setVisibility(View.GONE);
			break;
		case YEAR_MONTH:
			textSize = textSize * 4;
			wv_day.setVisibility(View.GONE);
			wv_hours.setVisibility(View.GONE);
			wv_mins.setVisibility(View.GONE);
			shangwuxiawu.setVisibility(View.GONE);
		case SHX:
			textSize = textSize * 4;
			wv_hours.setVisibility(View.GONE);
			wv_mins.setVisibility(View.GONE);
			break;
		case YEAR_MONTH_DAY_HOUR:
			textSize = textSize * 4;
			wv_mins.setVisibility(View.GONE);
			shangwuxiawu.setVisibility(View.GONE);
			tvHour.setVisibility(View.VISIBLE);
			break;
		}
		wv_day.setTextSize(textSize);
		wv_month.setTextSize(textSize);
		wv_year.setTextSize(textSize);
		wv_hours.setTextSize(textSize);
		wv_mins.setTextSize(textSize);
		shangwuxiawu.setTextSize(textSize);
		tvDay.setTextSize(textSize);
		tvMonth.setTextSize(textSize);
		tvYear.setTextSize(textSize);
		tvHour.setTextSize(textSize);

	}

	/**
	 * 设置是否循环滚动
	 * 
	 * @param cyclic
	 */
	public void setCyclic(boolean cyclic)
	{
		wv_year.setCyclic(cyclic);
		wv_month.setCyclic(cyclic);
		wv_day.setCyclic(cyclic);
		wv_hours.setCyclic(cyclic);
		wv_mins.setCyclic(cyclic);
		shangwuxiawu.setCyclic(cyclic);
	}

	public String getTime()
	{
		StringBuffer sb = new StringBuffer();
		String month = wv_month.getCurrentItem()+"";
		String day = wv_day.getCurrentItem()+"";
		String hour = wv_hours.getCurrentItem()+"";
		if (Integer.parseInt(month)<10) {
			month = "0"+month;
		}
		if (Integer.parseInt(day)<10) {
			day = "0"+day;
		}
		if (Integer.parseInt(hour)<10) {
			hour = "0"+hour;
		}
		switch (type) {
		case SHX:
			sb.append((wv_year.getCurrentItem())).append("年").append(month).append("月").append(day).append("日").append(" ").append(list_shx.get(shangwuxiawu.getCurrentItem()));
			break;
		case YEAR_MONTH_DAY:
			sb.append((wv_year.getCurrentItem())).append("年").append(month).append("月").append(day).append("日");
			break;
		case YEAR_MONTH_DAY_HOUR:
			sb.append((wv_year.getCurrentItem())).append("年").append(month).append("月").append(day).append("日").append(" ").append(hour).append("时");
			break;
		default:
			sb = new StringBuffer();
			// sb.append((wv_year.getCurrentItem() +
			// startYear)).append("-").append((wv_month.getCurrentItem() +
			// 1)).append("-").append((wv_day.getCurrentItem() +
			// 1)).append(" ").append(wv_hours.getCurrentItem()).append(":").append(wv_mins.getCurrentItem());
			sb.append((wv_year.getCurrentItem())).append("-").append((wv_month.getCurrentItem())).append("-").append((wv_day.getCurrentItem())).append(" ").append(wv_hours.getCurrentItem()).append(":").append(wv_mins.getCurrentItem());
			break;
		}
		
		return sb.toString();
	}

	public View getView()
	{
		return view;
	}

	public void setView(View view)
	{
		this.view = view;
	}

	public int getStartYear()
	{
		return startYear;
	}

	public void setStartYear(int startYear)
	{
		this.startYear = startYear;
	}

	public int getEndYear()
	{
		return endYear;
	}

	public void setEndYear(int endYear)
	{
		this.endYear = endYear;
	}
}
